<!doctype html>
<script src='../../resources/testharness.js'></script>
<script src='../../resources/testharnessreport.js'></script>
<div id="div1"><div id="div2"></div></div>
<script>
test(() => {
  const div1 = document.getElementById('div1');
  const div2 = document.getElementById('div2');
  // slot1 (#div2 is assigned)
  div1.attachShadow({mode: 'open'}).innerHTML='<slot></slot>';
  // slot2
  div2.attachShadow({mode: 'open'}).innerHTML='<slot></slot>';

  document.body.offsetTop;
  // All shadow roots' assignment recalc flags are clean.
  div1.remove();
  const span = document.createElement('span');
  // #div2's shadow root's assignment recalc flag becomes dirty.
  div2.appendChild(span);
  // #div1's shadow root's assignment recalc flag becomes dirty.
  document.body.appendChild(div2);
  // slot2's assignment is recalculated.
  document.body.offsetTop;
  span.appendChild(div1);
  // #div1's shadow root's assignment recalc flag is still dirty.
  span.remove();
}, "crbug.com/847056. Cyclic detach should not happen.");
</script>
